package pl.edu.pk.psb.bc.dao;

import java.util.List;

import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;

public abstract class GenericDaoImpl<T> implements GenericDao<T> {
	private Class<T> klasaDao;

	@Autowired
	protected SessionFactory sessionFactory;

	public GenericDaoImpl(Class<T> klasaDao) {
		this.klasaDao = klasaDao;
	}

	@Override
	public void zapisz(T obiekt) {
		sessionFactory.getCurrentSession().saveOrUpdate(obiekt);
	}
	
	@Override
	public Integer dodaj(T obiekt) {
		return (Integer) sessionFactory.getCurrentSession().save(obiekt);
	}

	@Override
	@SuppressWarnings("unchecked")
	public T pobierz(Integer id) {
		return (T) sessionFactory.getCurrentSession().load(klasaDao, id);
	}

	@Override
	public void usun(T obiekt) {
		sessionFactory.getCurrentSession().delete(obiekt);
	}

	@Override
	@SuppressWarnings("unchecked")
	public List<T> pobierzWszystkie() {
		return sessionFactory.getCurrentSession().createCriteria(klasaDao).list();
	}
}
